674. 最长连续递增序列
674. 最长连续递增序列 - 力扣(LeetCode)
Similar Question
Solution Tips
方案一: 滑动窗口 (贪心思想)
var findLengthOfLCIS = function(nums) {
// 窗口的大小是动态的, 如果遇到递减的数, 直接把 start 挪动到这个位置
let start = 0;
let end = 1;
let maxLen = 0;
while (end < nums.length) {
if (nums[end] > nums[end - 1]) {
end++;
}
else {
maxLen = Math.max(maxLen, end - start)
start = end;
end++;
}
}
maxLen = Math.max(maxLen, end - start)
return maxLen;
};
感觉有点强行滑动窗口了, 还不如直接一轮遍历, 记录大小
var findLengthOfLCIS = function(nums) {
let ans = 0;
const n = nums.length;
let start = 0;
for (let i = 0; i < n; i++) {
if (i > 0 && nums[i] <= nums[i - 1]) {
start = i;
}
ans = Math.max(ans, i - start + 1);
}
return ans;
};
方案二: 动态规划
感觉也有点强行 dp 的意思
var findLengthOfLCIS = function(nums) {
// 如果要用 dp 的思想来做
// dp[i] 以 nums[i] 结尾的最长递增子数组的长度
if (nums.length === 1) return 1;
const dp = Array.from({ length: nums.length });
dp[0] = 1;
let res = 0;
for (let i = 1; i < nums.length; i++) {
dp[i] = nums[i] > nums[i - 1] ? dp[i - 1] + 1 : 1;
res = Math.max(res, dp[i]);
}
return res
};
console.log(findLengthOfLCIS([1,3,5,4,7]));